/*
 * Copyright (C) 2010-2011 Graz University of Technology, Austria. All Rights reserved. 
 *
 * Contact: Simone Kopeinik <simone.kopeinik@tugraz.at>
 * 	   Graz University of Technology, Knowledge Management Institute, Brückenkopfgasse 1/6, 8020 Graz 	
 * 	   <http://www.kmi.tugraz.at/>
 * 
 * This software is part of the TARGET platform developed by the
 * TARGET EC-funded project www.reachyourtarget.org
 *
 * This software is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, version 3.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * The GNU General Public License is available at <http://www.gnu.org/licenses/>.
 *
 */
package at.tugraz.kmi.css.cbkst2;

import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

/**
 * Abstract class that is common to all CbSKT structure loaders extending for
 * CbKST prerequesite based model.
 * 
 * @param <V>
 *            The Class the Structure is defined on.
  *
 * @author Georg Oettl <georg.oettl@gmail.com>
 */
public abstract class StructureLoader<V extends CbKSTVertex> {

	/**
	 * @param inputData
	 * @return a PrerequesiteOrderSet
	 * 
	 * @throws IOException
	 */
	public abstract PrerequesiteOrderSet<V> readStructure(Reader inputData)
			throws IOException;

	/**
	 * @param structure
	 * @param outputData
	 * @throws IOException
	 */
	public abstract void writeStructure(
			ImmutablePrerequesiteOrderSet<V> structure, Writer outputData)
			throws IOException;

	/**
	 * Returns a description of the used loader type.
	 * 
	 * @return The type description of the Structure builder.
	 */
	public abstract PERSISTENCE_TYPE type();

}